
from django.shortcuts import render

# Create your views here.
from decimal import Decimal

from django_redis import get_redis_connection
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.permissions import IsAuthenticated

from goods.models import SKU
from order.serializers import PlaceOrderSerializer,PlaceSerializer

#订单

class PlaceOrderAPIView(APIView):
    """
    前端必须传递一个用户信息 token

    1、这个视图必须是登陆用户才可以访问
    2、获取用户信息
    3、根据用户信息获取redis中选定的商品
    4、根据id查询商品信息
    5、将对象列表转换为字典列表
    6、返回相应
    """
    # 1、这个视图必须是登陆用户才可以访问
    permission_classes = [IsAuthenticated]
    def get(self,request):
        # 2、获取用户信息
        user = request.user
        # 3、根据用户信息获取redis中选定的商品id
        redis_conn = get_redis_connection('cart')
        sku_id_counts = redis_conn.hgetall('cart_%s' % user.id)
        #将bytes数据类型转换为int类型
        redis_cart = {}
        for sku_id,count in sku_id_counts.items():
            redis_cart[int(sku_id)]=int(count)

        selected_ids = redis_conn.smembers('cart_selected_%s'%user.id)
        # 4、根据id查询商品信息
        skus = SKU.objects.filter(pk__in=selected_ids)

        for sku in skus:
            sku.count = redis_cart[sku.id]
        # 5、将对象列表转换为字典列表
        serializer = PlaceOrderSerializer(skus,many=True)
        #价格，最好使用货币类型
        # Decimal可以保存数据的精度
        freight = Decimal('10')
        result = {
            'freight':freight,
            'skus':serializer.data
        }
        # 6、返回相应
        return Response(result)

        # freight = Decimal('10')
        # serializer = PlaceOrderSerializer({
        #     'skus':skus,
        #     'freight':freight
        # })
        # return Response(serializer.data)




"""
当用户提交订单按钮的时候，前端必须传递 用户信息，地址信息，支付方式

后端：
    1、接受数据
    2、验证数据
    3、数据入库
    4、返回响应

    POST    /order/

"""
from .serializers import OrderSerializer

class OrderAPIView(APIView):

    permission_classes = [IsAuthenticated]

    def post(self,request):
        # 1、接受数据
        data = request.data
        # 2、验证数据
        serializer = OrderSerializer(data=data)
        # 3、数据入库
        serializer.is_valid(raise_exception=True)
        serializer.save()
        # 4、返回响应
        return Response(serializer.data)










































